home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / enigma / earcd / comm / comm5 / nwsbrkr5.lha / Reader / NewsBreaker / src / ums / Grouping.c < prev    next >
Text File  |  1996-12-15  |  4KB  |  123 lines

  1. /* UMSGrouping.c */
  2. /* Messages mit gemeinsamen Merkmalen */
  3. /* Features entfernen */
  4.  
  5. /*
  6. Umbenenung. Es gibt Verwechslungsprobleme:
  7.  
  8.      Gruppe/Group ---- UMS: ein Feldbezeichner einer Nachricht
  9.                   ---- NewsBreaker: eine Menge ähnlicher Nachrichten
  10.  
  11. Deshalb umbenennen:
  12.   Gruppe (Newsbreaker) heißt jetzt "Grouping" vielleicht fällt mir
  13. noch was besseres ein, schaun mer mal :-)
  14. Ein wort gesucht für --> eine Menge gleichartiger Nachrichten
  15. (Messages), die wegen gemeinsamer Regel zusammengefasst wurden;
  16.  
  17.                  Regeln wie sie z.B. sprachlich ausgedrückt werden können:
  18.  
  19.                  - "alle neuen Messages"
  20.                  - "alle neuen Msg der Newsgruppe comp.sys.amiga.misc"
  21.  
  22.                  aber auch
  23.  
  24.                  - "alle emails von Martin Loos seit zehn Tagen von heute an"
  25.  
  26.  
  27.        Der Sinn: flexibles Gruppieren. Idee: grouping als Objekt.
  28.                  d.h. Funktion/Objekt die intern Liste hat. Und auf Anforderung
  29.                  gewisse Daten "rausläßt", "erneuert", "vergißt" ...
  30.  
  31.                  Man könnte auch die gesamten UMS-Fkt wrappen,
  32.                  in einer einheitlichen Klassenbibliothek.
  33.  
  34.              umsrootclass                o  kennt LibraryBase. Jeder Prozeß hat eine!
  35.                   \
  36.                 umsaccountclass          o  loggt sich ein & aus. Hat account als
  37.                     |                       lokale Instanzdata.
  38.                      \
  39.                    umsgroupingclass      o  eine Instanz dieser Klasse verwaltet
  40.                       |                     ihre eigene Message-Liste,
  41.                       |                     wie einige Zeilen oben angerissen.
  42.                        \
  43.                       umsmessageclass    o  diese letzte Klasse bildet die Struktur einer
  44.                                             einzelnen UMS-Message ab:
  45.                                             eine Instanz hält dann praktischerweise
  46.                                             als Instanzdaten
  47.                                             {
  48.                                               UMSMsgNumFields[]
  49.                                               MessageInfo (V 11)
  50.                                             }
  51.                                             Die Klasse bekommt eine Nachricht ala
  52.                                             UO_NEW + MsgNum und verschafft sich dann
  53.                                             über ihre Superklasse(n) alle wichtigen
  54.                                             Parameter (die in einewr erweiterten Struct
  55.                                             liegen). Dann ist sie wieder "zurück" und
  56.                                             kann UMSRMsg() korrekt aufrufen und ihre Instanz
  57.                                             Daten versuchen auszufüllen.
  58.  
  59.                                             Bei Msg UO_DISPOSE löscht sie allozierten Speicher.
  60.                                             Und führt UMSFreeMsg() aus.
  61.  
  62.                                             Dann könnten weitere Methoden wie:
  63.                                             UO_ (to be continued)
  64. */
  65.  
  66. /*
  67.  * ChangeFlagsCurrentGroup
  68.  *
  69.  * INPUTS
  70.  *   UMSSet set - welche Flag setzen (z.B. UMSUSTATF_Old)
  71.  *   UMSSet unset - welche Flags löschen
  72.  *
  73.  * RESULT
  74.  *   count -- Anzahl erfolgreich geänderter (Flags set/unset) Messages
  75.  *            30 Messages --> set OLD, unset EXPIRED --> count <= 30
  76.  *
  77.  */
  78.  
  79. int
  80. ChangeFlagsCurrentGroup (UMSSet set, UMSSet unset)
  81. {
  82.   int count = 0;
  83.   struct List *list = GlobMsgList;
  84.   struct MyNodes *name_node;
  85.   struct MyNodes *next_node;
  86.   int success = 0;
  87.   UMSMsgNum num = 0;
  88.  
  89.   if (list)
  90.     {
  91.       name_node = (struct MyNodes *) (list->lh_Head);
  92.       while (next_node = (struct MyNodes *) (name_node->node.ln_Succ))
  93.     {
  94.       /* Messagenummer ermitteln */
  95.       num = name_node->num;
  96.  
  97.       /* Flags bearbeiten: Lösche / Setze Flags einer Message */
  98.       success = UMSSelectTags (account,
  99.                    UMSTAG_SelUnset, unset,
  100.                    UMSTAG_SelSet, set,
  101.                    UMSTAG_SelQuick, TRUE,
  102.                    UMSTAG_SelMsg, num,
  103.                    TAG_DONE);
  104.  
  105.       /* Listenhandling, Zähler: */
  106.       name_node = next_node;
  107.  
  108.       if (!success)
  109.         {
  110.           printf ("ChangeFlags: Fehler bei Message Nr. %ld\n", num);
  111.         }
  112.       else
  113.         {
  114.           count++;
  115.         }
  116.     }
  117.     }
  118.   else
  119.     printf ("ChangeFlags: Listheader ist nicht vorhanden.\n");
  120.   return (count);
  121. }
  122.  
  123.